package com.huaxinkaiye.utils;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.util.Log;

/**
 * @project: TIIS
 * @Title: SimpleClient.java
 * @Package com.rainet.tiis.network
 * @Description: HTTP请求factory
 * @author 杨贵松
 * @date 2014-3-18 下午12:39:23
 * @version V1.0
 */
public class SimpleClient {
	private static HttpParams httpParams;
	private static DefaultHttpClient httpClient;
	public static String JSESSIONID; // 定义一个静态的字段，保存sessionID

	/**
	 * @Title: getHttpClient
	 * @author 杨贵松
	 * @date 2014-3-18 下午1:11:18
	 * @Description: 获取HttpClient
	 * @return
	 * @throws Exception
	 *             HttpClient 返回
	 */
	public static HttpClient getHttpClient() throws Exception {
		// 创建 HttpParams 以用来设置 HTTP 参数（这一部分不是必需的）
		httpParams = new BasicHttpParams();
		// 设置连接超时和 Socket 超时，以及 Socket 缓存大小
		HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
		HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
		HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
		// 设置重定向，缺省为 true
		HttpClientParams.setRedirecting(httpParams, true);
		// 设置 user agent
		String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";
		HttpProtocolParams.setUserAgent(httpParams, userAgent);
		// 创建一个 HttpClient 实例
		// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient
		// 中的用法，在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient
		httpClient = new DefaultHttpClient(httpParams);
		return httpClient;
	}

	/**
	 * @Title: doGet
	 * @author 杨贵松
	 * @date 2014-3-18 下午12:39:58
	 * @Description: doGet请求
	 * @param url
	 * @param params
	 * @return
	 * @throws Exception
	 *             String 返回
	 */
	@SuppressWarnings("rawtypes")
	public static String doGet(String url, Map params) throws Exception {
		/* 建立HTTPGet对象 */
		String paramStr = "";
		if (params != null) {
			Iterator iter = params.entrySet().iterator();
			while (iter.hasNext()) {
				Map.Entry entry = (Map.Entry) iter.next();
				Object key = entry.getKey();
				Object val = entry.getValue();
				paramStr += paramStr = "&" + key + "=" + val;
			}
		}
		if (!paramStr.equals("")) {
			paramStr = paramStr.replaceFirst("&", "?");
			url += paramStr;
		}
		Log.e("role_url", url);
		HttpGet httpRequest = new HttpGet(url);
		if (null != JSESSIONID) {
			httpRequest.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
			Log.e("JSESSIONID", JSESSIONID+"");
		}
		String strResult = "doGetError";
		/* 发送请求并等待响应 */
		HttpResponse httpResponse = httpClient.execute(httpRequest);
		/* 若状态码为200 ok */
		if (httpResponse.getStatusLine().getStatusCode() == 200) {
			/* 读返回数据 */
			strResult = EntityUtils.toString(httpResponse.getEntity());
		} else {
			strResult = "Error Response: "
					+ httpResponse.getStatusLine().toString();
		}
		Log.v("strResult", strResult);
		return strResult;
	}

	/**
	 * @Title: doPost
	 * @author 杨贵松
	 * @date 2014-3-18 下午12:39:38
	 * @Description: doPost请求
	 * @param url
	 * @param params
	 * @throws ExceptionString 返回
	 */
	public static String doPost(String url, List<NameValuePair> params)
			throws Exception {
		/* 建立HTTPPost对象 */
		HttpPost httpRequest = new HttpPost(url);
		String strResult = "doPostError";
		/* 添加请求参数到请求对象 */
		Log.e("-----", params.get(0).getValue());
		try {
			//if (params != null && params.size() > 0) {
				httpRequest.setEntity(new UrlEncodedFormEntity(params,
						HTTP.UTF_8));
			//}

			if (null != JSESSIONID) {
				httpRequest.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
				Log.e("JSESSIONID", JSESSIONID+"");
			}
			/* 发送请求并等待响应 */
			httpClient=(DefaultHttpClient) SimpleClient.getHttpClient();
	         // 请求超时
			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
            // 读取超时
			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
			HttpResponse httpResponse = httpClient.execute(httpRequest);
			/* 若状态码为200 ok */
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				/* 读返回数据 */
				strResult = EntityUtils.toString(httpResponse.getEntity());
				/* 获取cookieStore */
				CookieStore cookieStore = httpClient.getCookieStore();
				List<Cookie> cookies = cookieStore.getCookies();
				for (int i = 0; i < cookies.size(); i++) {
					if ("JSESSIONID".equals(cookies.get(i).getName())) {
						JSESSIONID = cookies.get(i).getValue();
						break;
					}
				}
			}else{
				strResult="failds";	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return strResult;
	}

}